package observer;

/**
 * 观察者模式（发布-订阅模式）
 * 观察者模式最简单的例子就是 订阅报刊
 * 订阅者只需要去报社订阅报刊，那么每当有新报刊发表，就会主动通知订阅此报刊的人。
 * 在观察者模式中，订阅者就是观察者对象（Observer），而报刊就是主题对象(Subject)
 */
public class Client {

    static Subject subject;
    static ConcreteObserverA concreteObserverA;
    static ConcreteObserverB concreteObserverB;

    public static void main(String[] args) {
        init();

        subject.notifyObservers();

        subject.removeObserver(concreteObserverA);
        subject.notifyObservers();
    }

    private static void init() {
        subject = new ConcreteSubject();
        concreteObserverA = new ConcreteObserverA();
        concreteObserverB = new ConcreteObserverB();
        subject.addObserver(concreteObserverA);
        subject.addObserver(concreteObserverB);
    }
}
